// Copyright (c) 1999-2004 Brian Wellington (bwelling@xbill.org)

package org.xbill.DNS;

import java.io.*;
import java.net.*;

/**
 * IPv6 Address Record - maps a domain name to an IPv6 address
 * 
 * @author Brian Wellington
 */

public class AAAARecord extends Record {

	private static final long serialVersionUID = -4588601512069748050L;

	private InetAddress address;

	AAAARecord() {
	}

	Record getObject() {
		return new AAAARecord();
	}

	/**
	 * Creates an AAAA Record from the given data
	 * 
	 * @param address
	 *            The address suffix
	 */
	public AAAARecord(Name name, int dclass, long ttl, InetAddress address) {
		super(name, Type.AAAA, dclass, ttl);
		if (Address.familyOf(address) != Address.IPv6)
			throw new IllegalArgumentException("invalid IPv6 address");
		this.address = address;
	}

	void rrFromWire(DNSInput in) throws IOException {
		address = InetAddress.getByAddress(name.toString(),
				in.readByteArray(16));
	}

	void rdataFromString(Tokenizer st, Name origin) throws IOException {
		address = st.getAddress(Address.IPv6);
	}

	/** Converts rdata to a String */
	String rrToString() {
		return address.getHostAddress();
	}

	/** Returns the address */
	public InetAddress getAddress() {
		return address;
	}

	void rrToWire(DNSOutput out, Compression c, boolean canonical) {
		out.writeByteArray(address.getAddress());
	}

}
